package com.sxj.corejava.code07_面向对象.bms;

/**
 * @author 石小俊
 * @date 2024年03月26日 18:44
 */
public abstract class Account {

    // 定义一个卡号的初始值,要求所有账户共享该初始值
    // 将其设置为静态变量
    private static int initId = 1000;

    private int id;          // 卡号
    private String name;         // 姓名
    private String password;    // 密码
    private String personId;    // 身份证号码
    private String phone;       // 手机号码
    private double balance;     // 账户余额

    public Account() {
        // 在此处自动生成卡号的值
        // 其值从1000开始,每次自增1
        this.id = initId++;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPersonId() {
        return personId;
    }

    public void setPersonId(String personId) {
        this.personId = personId;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getBalance() {
        return balance;
    }

    public void setBalance(double balance) {
        this.balance = balance;
    }

    /**
     * 存款方法,该方法不允许被子类重写,因此使用final修饰
     * @param money
     */
    public final void deposit(double money) {
        this.balance += money;
    }

    /**
     * 取款方法根据账户类型不同,业务也不同
     * 该方法子类必须重写,因此设计为抽象方法
     * @param money
     * @return
     */
    public abstract boolean withdrawMoney(double money);
}
